iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
0
Modern Web

30天前端網頁技術超入門介紹系列 第 23

Day23. ES6(一) - let、const 可能會忽略的小細節

  • 分享至 

  • xImage
  •  

今天終於進入 ES6 的範圍了(灑花~~ 最近想不到有甚麼好寫的,就乾脆來照清單寫好了。

let 和 const 兩個東西也出現好幾年了... 現在才要來講好像太晚了,所以除了教學之外順便講講可能會忽略的小細節。

let

let 的用法基本上與 var 沒有差別,都可以用來宣告變數
不過 let 不會受到 Hoisting 的影響。忘記 Hoisting 的可以去看這篇 Day22. Hoisting 的觀念

console.log(isA); // undefined
var isA = 'a';

console.log(isB); // isB is not defined
let isB = 'b';

所以請記得在一開始就先把變數宣告好。這也是個好習慣就是了~~

另外,使用 var 的話會汙染到全域變數,而 let 只會在自己的作用域中有效,就是離自己最近的大括號中{},等等要介紹的 const 也一樣。

var isA = 'A';
if(isA){
    var red = 'red';
}
console.log(red); // red
let isA = 'A';
if(isA){
    let red = 'red';
}
console.log(red); // red is not defined

因為只在自己作用域中有效,所以下述範例中的 else 也無效。

let isA;
if(isA){
    let red = 'red';
}
else{
    console.log('else');
    console.log(red); // red is not defined
}
console.log(red);

迴圈內的話,因為 let 可以被重新賦值因此可以執行

let count1 = [];
for(let i = 0; i < 10; i++){
    count1.push(function(){
        console.log(i);
    })
}
count1.forEach(function(item){
    item(); // 0~9
});

let 也禁止重複宣告

var isA = 'A';
var isA = 'a';
console.log(isA); // a
let isA = 'A';
let isA = 'a';
console.log(isA); // Identifier 'isA' has already been declared

let 總結

  • 用法跟 var 差不多,而且比較安全
  • 不受 Hoisting 的影響
  • 只在自己的作用域中有效
  • 禁止重複宣告

const

const 全名是 constant(不變),顧名思義,宣告後就無法再改變的變數。

const num = 5;
num = 6;
console.log(num); // Uncaught TypeError: Assignment to constant variable.

還記得我在執行環境與作用域中講到"任何變數在未賦予值之前都是 undefined"嗎? 忘記的可以再去看看 Day21. JavaScript 的執行環境與作用域

因為 undefined 是一個值,所以在 const 宣告後沒有直接賦予值,那之後就不能再改了!!(而且他也不會給你宣告
https://ithelp.ithome.com.tw/upload/images/20200930/20119051wMbNZUmTL7.png

const 也只能在自己的作用域中使用。

const TRue = true;
if(TRue){
    const isA = 'A';
}
console.log(isA); // isA is not defined

迴圈內的話,因為執行了 i++,const 被重新賦值而會出現錯誤。

var count2 = [];
for(const i = 0; i < 10; i++){
    count2.push(function(){
        console.log(i);
    })
}

另外,const 雖然禁止自己修改資訊,但是允許自己底下的其他值修改

const JK = {
    name: 'Yukinoshita Yukino',
}
JK.name = 'Yuigahama Yui';
console.log(JK.name);

直接修改自己本身的話會出錯

const JK = {
    name: 'Yukinoshita Yukino',
}
JK = {
    name: 'Yuigahama Yui',
};
console.log(JK.name); // Uncaught TypeError: Assignment to constant variable.

最後,有些人在使用命名 const 的變數時會建議使用大寫,這樣可以清楚地與 let 宣告做出區別。

const 總結

  • const 宣告並賦值後無法被改變,所以也禁止重複宣告
  • 不受 Hoisting 的影響
  • 只在自己作用域中有效
  • 允許自己底下的值做修改

就個人來說從 var 改成 let、const 非常舒服,在使用上 let 感覺就像 var 的完全體...
那今天 ES6 最初的教學就到這邊喽~~ 明天見~~


上一篇
Day22. Hoisting 的觀念
下一篇
Day24. ES6(二) - 字串模板、標籤樣板
系列文
30天前端網頁技術超入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言